<?php
/**
 * La classe Login gestisce i logins degl'utenti. Tramite i suoi metodi possiamo sapere
 * quanti login ha effettuato ciascun utente, da che indirizzo ip, la data e l'ora esatta di ogni accesso
 *
 * @author Stefano Poncini
 * @version 1.0
 */
class Login{
	
	public $ip_address;
	public $time;
	
	function __construct(){
		
	}
	
	function getNrLogins($user_id){
		
		$profileResult = Database::getInstance()->getConnection()->Execute("SELECT `ID_PROFILE` FROM `profile` WHERE fk_ID_USER = ?", array($user_id));
		
		if($profileResult->NumRows() != 1){
			return false;
		}else{
			$profileRow = $profileResult->FetchRow();
			// Preparazione della query per ricavare l'indirizzo IP dell'utente che ha effettuato il login
			$sql = "SELECT * FROM `login` WHERE `fk_ID_PROFILE` = ?";
	
	        // Query di estrazione IP
			$result = Database::getInstance()->getConnection()->Execute($sql, array($profileRow['ID_PROFILE']));
			
			return $result->NumRows();
		}
		
		
	}

	function getIPAddress($user_id){
		
		$profileResult = Database::getInstance()->getConnection()->Execute("SELECT `ID_PROFILE` FROM `profile` WHERE fk_ID_USER = ?", array($user_id));
		
		if($profileResult->NumRows() != 1){
			return false;
		}else{
			$profileRow = $profileResult->FetchRow();
			// Preparazione della query per ricavare l'indirizzo IP dell'utente che ha effettuato il login
			$sql = "SELECT `ip_address` 
					FROM `login` 
					WHERE `fk_ID_PROFILE` = ? AND `ID_LOGIN` = 
						(SELECT MAX(`ID_LOGIN`) 
						FROM `login` 
						WHERE `fk_ID_PROFILE` = ?)";
	
	        // Query di estrazione IP
			$result = Database::getInstance()->getConnection()->Execute($sql, array($profileRow['ID_PROFILE'], $profileRow['ID_PROFILE']));
			
			// Elaborazione dati
			
			if($result->NumRows() != 1){
				return false;
			}else{
				$row = $result->FetchRow();
				
				return $row['ip_address'];
			}
			
			$result->close();
		}
		
		
	}
	
	function insertLogin($user_id){
		
		$profileResult = Database::getInstance()->getConnection()->Execute("SELECT `ID_PROFILE` FROM `profile` WHERE `fk_ID_USER` = ?", array($user_id));
		
		if($profileResult->NumRows() != 1){
			return false;
		}else{
			$profileRow = $profileResult->FetchRow();
			
			// Ricavo l'indirizzo ip dell'utente che ha effettuato l'accesso
			$this->ip_address = $_SERVER['REMOTE_ADDR'];
			
			// Ricavo data e ora al momento dell'accesso dell'utente
			$this->time = time();
				
			// Preparazione della query per l'inserimento dei dati del login
			$sql = "INSERT INTO `login` VALUES(null, ?, ?, ?)";
	
	        // Inserimento dell'indirizzo ip nello storico
			$result = Database::getInstance()->getConnection()->Execute($sql, array($this->ip_address, date("Y-m-d H:i:s", $this->time), $profileRow['ID_PROFILE']));
			
			//$result->close();
		}
		
		
		
		return true;
	}
	
	function getLastLoginTime($user_id){
		
		$profileResult = Database::getInstance()->getConnection()->Execute("SELECT `ID_PROFILE` FROM `profile` WHERE fk_ID_USER = ?", array($user_id));
		
		if($profileResult->NumRows() != 1){
			return false;
		}else{
			$profileRow = $profileResult->FetchRow();
			
			// Preparazione della query per ricavare l'indirizzo IP dell'utente che ha effettuato il login
			$sql = "SELECT `datetime` 
					FROM `login` 
					WHERE `fk_ID_PROFILE` = ? AND `ID_LOGIN` = 
						(SELECT MAX(`ID_LOGIN`) 
						FROM `login` 
						WHERE `fk_ID_PROFILE` = ?)";
	
	        // Query di estrazione IP
			$result = Database::getInstance()->getConnection()->Execute($sql, array($profileRow['ID_PROFILE'], $profileRow['ID_PROFILE']));
			
			// Elaborazione dati
			
			if($result->NumRows() != 1){
				return false;
			}else{
				$row = $result->FetchRow();
				//echo $row['datetime'] . '<br />';
				$time = $this->convertDateTime($row['datetime']);
				
			
				return date("d.m.Y", $time)  . ' @ ' .  date("H:i:s", $time);
			}		
			
			$result->close();
		}
		
		
	}
	
	function convertDateTime($str) {
	
	    list($date, $time) = explode(' ', $str);
	    list($year, $month, $day) = explode('-', $date);
	    list($hour, $minute, $second) = explode(':', $time);
	    
	    $timestamp = mktime($hour, $minute, $second, $month, $day, $year);
	    
	    return $timestamp;
	}
}
?>